package com.sunnada.demo.common;

/**
 * Class description
 *
 *
 * @version        Enter version here..., 18/09/14
 * @author         李瑞益
 */
@SuppressWarnings("all")
public class PagerItem {

    /**页面数据大小 */
    private Long pageSize = 10L;

    /** 页面索引 */
    private Long pageNum = 1L;

    /** 页面行数 */
    private Long rowCount = 0L;

    /** 页面总数 */
    private Long pageCount = 1L;

    /** 当前页面显示数据的第一行的索引
     * 数据库查找的开始索引 */
    private Long startNum = 0L;

    /** Field description */
    private String url = "";

    /** 页面大小对应名称 */
    private String paramPageSize = "pageSize";

    /** 当前页索引对应名称 */
    private String paramPageNum = "pageNum";

    /** 第一页索引 */
    private Long firstPageNum = 1L;

    /** 最后一页索引 */
    private Long lastPageNum = 1L;

    /** 上一页索引 */
    private Long prevPageNum = 1L;

    /** 下一页索引 */
    private Long nextPageNum = 1L;

    /** 首页url */
    private String firstPageUrl;

    /** 最后一页url */
    private String lastPageUrl;

    /** 上一页url */
    private String prevPageUrl;

    /** 下一页url */
    private String nextPageUrl;

    public PagerItem() {}

    public PagerItem(Long pPageSize) {
        this.setPageSize(pPageSize);
        reset();
    }

    public PagerItem(Long pPageSize, Long pPageNum) {
        this.setPageSize(pPageSize);
        this.setPageNum(pPageNum);
        reset();
    }

    public PagerItem(Long pPageSize, Long pPageNum, Long pRowCount) {
        this.setPageSize(pPageSize);
        this.setPageNum(pPageNum);
        this.setRowCount(pRowCount);
        reset();
    }

    /**
     * Method description
     *
     * @param pPageNum
     *
     * @return
     */
    public PagerItem changePageNum(Long pPageNum) {
        setPageNum(pPageNum);

        return reset();
    }

    /**
     * 更改页面数据大小
     *
     * @param pPageSize 页面数据大小
     *
     * @return 页面对象
     */
    public PagerItem changePageSize(Long pPageSize) {
        setPageSize(pPageSize);

        return reset();
    }

    /**
     * Method description
     *
     * @param pRowCount
     *
     * @return
     */
    public PagerItem changeRowCount(Long pRowCount) {
        setRowCount(pRowCount);

        return reset();
    }

    /**
     * Method description
     *
     * @param pUrl
     *
     * @return
     */
    public PagerItem changeUrl(String pUrl) {
        this.url = pUrl;
        resetPageUrl();

        return this;
    }

    /**
     * Method description
     *
     * @param pPageNum
     *
     * @return
     */
    public String generalUrl_ByPageNum(Long pPageNum) {
        String str = this.url;

        if (pPageNum < 0) {
            pPageNum = 1L;
        }

        str = SysFun.resetUrlQSValue(str, getParamPageSize(), "" + pageSize);
        str = SysFun.resetUrlQSValue(str, getParamPageNum(), "" + pPageNum);

        return str;
    }

    /**
     * Method description
     *
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("Test");

        PagerItem pager = new PagerItem(5L, 3L).changeRowCount(100L);

        System.out.println("limit " + pager.getStartNum() + ", " + pager.getPageSize());
    }

    /**
     * Method description
     *
     * @param pPageNum
     */
    public void parsePageNum(String pPageNum) {
        if (!SysFun.isNullOrEmpty(pPageNum)) {
            pageNum = SysFun.parseLong(pPageNum, 1L);
        }
    }

    /**
     * Method description
     *
     * @param pPageSize
     */
    public void parsePageSize(String pPageSize) {
        if (!SysFun.isNullOrEmpty(pPageSize)) {
            pageSize = SysFun.parseLong(pPageSize, 10L);
        }
    }

    /**
     *
     *
     *
     * @return
     */
    public PagerItem reset() {
        return resetPager().resetPageNum();
    }

    /**
     * 初始分页索引
     *
     *
     * @return
     */
    public PagerItem resetPageNum() {
        firstPageNum = 1L;
        lastPageNum  = pageCount;
        prevPageNum  = pageNum - 1;

        if (prevPageNum < firstPageNum) {
            prevPageNum = 1L;
        }

        nextPageNum = pageNum + 1;

        if (nextPageNum > lastPageNum) {
            nextPageNum = lastPageNum;
        }

        return this;
    }

    /**
     * 初始分页url
     *
     * @return
     */
    public PagerItem resetPageUrl() {
        resetPageNum();
        firstPageUrl = generalUrl_ByPageNum(firstPageNum);
        lastPageUrl  = generalUrl_ByPageNum(lastPageNum);
        prevPageUrl  = generalUrl_ByPageNum(prevPageNum);
        nextPageUrl  = generalUrl_ByPageNum(nextPageNum);
        return this;
    }

    /**
     * 初始当前页索引和页面数据大小
     *
     * @return
     */
    public PagerItem resetPager() {
        if (pageSize < 1) {
            pageSize = 10L;
        }
        pageCount = (rowCount + pageSize - 1) / pageSize;
        if (pageNum < 0) {
            pageNum = 1L;
        }
        if ((pageCount > 1) && (pageNum > pageCount)) {
            pageNum = pageCount;
        }
        return this;
    }

    /**
     * 查出的数据列表参数名
     *配合_page.html使用这个方法
     *
     * @return 数据列表参数名
     */
    public String getDataName() {
        return "DataList";
    }

    /**
     * 第一页索引
     *
     * @return
     */
    public Long getFirstPageNum() {
        return firstPageNum;
    }

    /**
     * 设置第一页索引
     *
     * @param firstPageNum
     */
    public void setFirstPageNum(Long firstPageNum) {
        this.firstPageNum = firstPageNum;
    }

    /**
     * 获取第一页索引url
     *
     * @return
     */
    public String getFirstPageUrl() {
        return firstPageUrl;
    }

    /**
     * 设置第一页索引url
     *
     * @param firstPageUrl
     */
    public void setFirstPageUrl(String firstPageUrl) {
        this.firstPageUrl = firstPageUrl;
    }

    /**
     * 获取最后一页索引
     *
     * @return
     */
    public Long getLastPageNum() {
        return lastPageNum;
    }

    /**
     * 设置最后一页索引
     *
     * @param lastPageNum
     */
    public void setLastPageNum(Long lastPageNum) {
        this.lastPageNum = lastPageNum;
    }

    /**
     * 获取最后一页url
     *
     * @return
     */
    public String getLastPageUrl() {
        return lastPageUrl;
    }

    /**
     * 设置最后一页url
     *
     * @param lastPageUrl
     */
    public void setLastPageUrl(String lastPageUrl) {
        this.lastPageUrl = lastPageUrl;
    }

    /**
     * 获取最大页数
     *
     * @return
     */
    public Long getNextPageNum() {
        return nextPageNum;
    }

    /**
     * 设置下一页索引
     *
     * @param nextPageNum
     */
    public void setNextPageNum(Long nextPageNum) {
        this.nextPageNum = nextPageNum;
    }

    /**
     * 得到下一页索引
     *
     * @return
     */
    public String getNextPageUrl() {
        return nextPageUrl;
    }

    /**
     * 设置下一页url
     *
     * @param nextPageUrl
     */
    public void setNextPageUrl(String nextPageUrl) {
        this.nextPageUrl = nextPageUrl;
    }

    /**
     * 获取页总数
     *
     * @return
     */
    public Long getPageCount() {
        return pageCount;
    }

    /**
     * 设置页总数
     *
     * @param pageCount
     */
    public void setPageCount(Long pageCount) {
        this.pageCount = pageCount;
    }

    /**
     * 获取当前页面索引
     *
     * @return
     */
    public Long getPageNum() {
        return pageNum;
    }

    /**
     * 设置当前页索引
     *
     * @param pageNum
     */
    public void setPageNum(Long pageNum) {
        this.pageNum = pageNum;
    }

    /**
     * 获取页面数据大小
     *
     * @return
     */
    public Long getPageSize() {
        return pageSize;
    }

    /**
     * 设置页面数据大小
     *
     * @param pageSize
     */
    public void setPageSize(Long pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 获取当前页索引对应名称
     *
     * @return
     */
    public String getParamPageNum() {
        return paramPageNum;
    }

    /**
     * 设置当前页对应名称
     *
     * @param paramPageNum
     */
    public void setParamPageNum(String paramPageNum) {
        this.paramPageNum = paramPageNum;
    }

    /**
     * 获取页面数据大小对应名称
     *
     * @return
     */
    public String getParamPageSize() {
        return paramPageSize;
    }

    /**
     * 设置页面数据大小对应名称
     *
     * @param paramPageSize
     */
    public void setParamPageSize(String paramPageSize) {
        this.paramPageSize = paramPageSize;
    }

    /**
     * 获取上一页索引
     *
     * @return
     */
    public Long getPrevPageNum() {
        return prevPageNum;
    }

    /**
     * 设置上一页索引
     *
     * @param prevPageNum
     */
    public void setPrevPageNum(Long prevPageNum) {
        this.prevPageNum = prevPageNum;
    }

    /**
     * 获取上一页url
     *
     * @return
     */
    public String getPrevPageUrl() {
        return prevPageUrl;
    }

    /**
     * 设置上一页url
     *
     * @param prevPageUrl 跳转的页面索引
     */
    public void setPrevPageUrl(String prevPageUrl) {
        this.prevPageUrl = prevPageUrl;
    }

    /**
     * 获取数据总数（行数）
     *
     * @return
     */
    public Long getRowCount() {
        return rowCount;
    }

    /**
     * 设置数据总数（行数）
     *
     * @param rowCount
     */
    public void setRowCount(Long rowCount) {
        this.rowCount = rowCount;
    }

    /**
     * 获取当前页面显示数据的第一行的索引
     * 数据库查找的开始索引
     *
     * @return
     */
    public Long getStartNum() {
        if (pageNum > 1) {
            startNum = (pageNum - 1) * pageSize;
        }

        if (startNum < 0) {
            startNum = 0L;
        }

        return startNum;
    }

    /**
     * 设置页面显示第一行数据的索引
     * 数据库开始索引
     *
     * @param startNum
     */
    public void setStartNum(Long startNum) {
        this.startNum = startNum;
    }

    /**
     * Method description
     *
     * @return
     */
    public String getUrl() {
        return url;
    }

    /**
     * Method description
     *
     * @param url
     */
    public void setUrl(String url) {
        this.url = url;
    }
}


//~ Formatted by Jindent --- http://www.jindent.com
